package ExtendsTest;
/*
方法重写
    1.子类继承父类中，有一些“行为”可能不需要改进，有一些”行为“可能面临着必须改进
    因为父类中继承过来的方法已经无法满足子类的业务需求
    2.当我们代码怎么编写的时候，构成方法覆盖
        条件1：两个类必须要有继承关系
        条件2：重写之后的方法和之前的方法具有：
              相同的返回值类型
              相同的方法名
              相同的形式参数列表
        条件3：访问权限不能更低，可以更高 //study()无法覆盖ExtendsTest.Student中的study()
              正在尝试分配更低的访问权限; 以前为public
        条件4：重写之后的方法不能比之前的方法抛出更多的异常，可以更少
    3.注意事项
        注意1：方法覆盖只是针对于方法，和属性无关
        注意2：私有方法无法覆盖
        注意3：构造方法不能被继承，所以构造方法也不能被覆盖
        注意4：方法覆盖只是针对于实例方法，静态方法覆盖没有意义
 */
public class ExtendsOverrideTest1 {
    public static void main(String[] args){
        MathStudent ms = new MathStudent();
        EnglishStudent es = new EnglishStudent();
        ms.study();
        es.study();
    }
}
class Student{
    public void study(){
        System.out.println("学生在上课");
    }
}
class MathStudent extends Student{
    //数学学生在上课的时候，我希望输出：数学学生在上数学课
    @Override
    public void study(){
        System.out.println("数学学生在上数学课");
    }
}
class EnglishStudent extends Student{
    //英语学生在上课的时候，我希望输出：英语学生在上英语课
    @Override
    public void study(){
        System.out.println("英语学生在上英语课" );
    }
}